home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / thesource-7.lha / Source / DefFunc.lha / DefFunc / dfctree.h < prev    next >
C/C++ Source or Header  |  1993-12-14  |  2KB  |  89 lines

  1. /*********************************************************
  2.  *
  3.  *    Copyright (c) 1993  Ke Jin
  4.  *
  5.  *    Permission to use, copy, modify, and distribute
  6.  *    this software and its documentation without fee
  7.  *    is granted, provided that the author's name and
  8.  *    this copyright notice are retained.
  9.  *
  10.  * -----------------------------------------------------
  11.  *
  12.  *    dfctree.h -- interface of defunc low level module
  13.  *
  14.  *    struct definition : Node
  15.  *
  16.  *    external function : exparse(); 
  17.  *              evaluate();
  18.  *                        getparsetree(); 
  19.  *                        reduce();
  20.  *
  21.  *********************************************************/
  22.  
  23. #ifndef _DFCTREE_H
  24. #define _DFCTREE_H
  25.  
  26. #ifndef NeedFunctionPrototypes
  27. #if defined(__STDC__)||defined(__cplusplus)
  28. #define NeedFunctionPrototypes 1
  29. #else 
  30. #define NeedFunctionPrototypes 0
  31. #endif  /* __STDC__ */
  32. #endif  /* NeedFunctionPrototypes */
  33.  
  34. #ifdef __cplusplus
  35.   extern "C" {    /* for c++ */
  36. #endif
  37.  
  38. typedef enum { 
  39.     const_node, 
  40.     arg_node, 
  41.  
  42.     unary_op_node,
  43.     binary_op_node, 
  44.  
  45.     simplex_fnct_node, 
  46.     duplex_fnct_node,
  47.     triplex_fnct_node,  /* not used in current version */
  48.  
  49.     arg_fnct_node       /* not used in current version */
  50. } Node_type;
  51.  
  52. typedef enum {
  53.     op_sum,
  54.     op_sub,
  55.     op_mul,
  56.     op_div,
  57.     op_neg
  58. } op_idx;
  59.  
  60. typedef struct {
  61.     Node_type type;
  62.     union {
  63.        int    argidx;
  64.        op_idx op;
  65.        double value;
  66.        double (*fnctptr)();
  67.     } content;
  68.     int left;
  69.     int right;
  70. } Node;
  71.  
  72. #if NeedFunctionPrototypes /* ANSI */
  73.    extern int    exparse(char* expression);
  74.    extern double evaluate(Node* tree, int i, double x, double y);
  75.    extern int    getparsetree(Node* buff);
  76.    extern Node*  reduce(Node* tree, int i);
  77. #else /* K&R */
  78.    extern int    exparse();
  79.    extern double evaluate();
  80.    extern int    getparsetree();
  81.    extern Node*  reduce();
  82. #endif /* NeedFunctionPrototype */
  83.  
  84. #ifdef __cplusplus
  85.   }    /* end for c++ */
  86. #endif
  87.  
  88. #endif /* _DFCTREE_H */
  89.